// 页面路径：store/index.js
import Vue from "vue";
import Vuex from "vuex";

import user from "./modules/user";
import getters from "./getters";

// 持久化插件
import persistence from "vuex-uniapp-persistence";

Vue.use(Vuex); //vue的插件机制
//Vuex.Store 构造器选项
const store = new Vuex.Store({
    // 使用模块
    plugins: [persistence()],
    // 存数据
    state: {
        // 页面进入拿数据的时候, 优先获取备份过的旧数据
        cart: uni.getStorageSync('cart') || []
    },
    mutations: {
        // 添加购物车
        addGoods(state, payload) {
            // 查找是否有旧商品 id 相同
            const prod = state.cart.find(item => item.goods_id === payload.goods_id)
            if (prod) {
                // 商品已经添加过, 数据加一即可
                prod.number++
            } else {
                // 数据没加过, 拼接好购物车要用的数据一起记录
                state.cart.push({
                    ...payload,
                    number: 1,
                    isCheck: true
                })
            }
            console.log('vuex 添加商品', state.cart);
            uni.setStorageSync('cart', state.cart)
        },
        // 单选
        toggleCheck(state, id) {
            // 接收到点击的商品信息, 要在 state.cart 内部
            // 找到这个商品并修改 isCheck 才行
            const prod = state.cart.find(item => item.goods_id === id)
            // 上面这个函数找到产品列表中id跟传入点击目标一致的对象, 返回了这个对象的引用地址
            prod.isCheck = !prod.isCheck
        },
        // 全选商品
        toggleAllCheck(state, payload) {
            // 这里的 payload 就是希望将所有商品改变的 isCheck 状态
            console.log('接收到的全选状态');
            state.cart.forEach(item => {
                item.isCheck = payload
            });
            // 持久化
            uni.setStorageSync('cart', state.cart)
        },
        // 购物车商品数量加
        plusGoods(state, id) {
            const prod = state.cart.find(item => item.goods_id === id)
            if (prod) {
                prod.number++
            }
        },
        // 左滑删除商品
        // delGoods(state, deletedItem) {
        //     // 使用 splice 方法删除指定商品对象
        //     const index = state.items.findIndex(item => item.id === deletedItem.id);
        //     if (index !== -1) {
        //       state.items.splice(index, 1);
        //     }
        //   },
    },
    actions: {},
    getters: {
        totalType: state => state.cart.length,
        // 计算总价格
        totalPrice: state => {
            let sum = 0
            state.cart.forEach(item => {
                if (item.isCheck) {
                    sum += item.goods_price * item.number
                }
            })
            return sum
            // console.log(sum);
            // const all = state.cart.reduce((before,start)=>{
            //     return before + start.goods_price
            // },0)
        },
        // 控制是否全选 只要有一个不符合就返回
        isAllCheck: (state) => {
            const result = state.cart.every(item => {
                return item.isCheck
            })
            return result
            // const arr = [1,2,3,4]
            // true 全部符合
            //  false 有一个不符合
            // const a = arr.every((item)=>{
            //     return item>0
            // })
            // isCheck true false

            // console.log(a);
        },
        // 总数量，显示在购物车
        totalNumber: (state) => {
            let sum = 0
            state.cart.forEach(item => {
                if (item.isCheck) {
                    sum += item.number
                }
            })
            return sum
        },
        // 商品
        productCheck: state => state.cart.filter(item => item.isCheck)
    },
    modules: { user },
});
export default store;